package hauwei.year2025.month4.day24;

import java.util.*;

public class Soccer {

    static class Player{
        String shot;
        int id;
        public Player(String shot, int id) {
            this.shot = shot;
            this.id = id;
        }
    }
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        String[] nm=scanner.nextLine().split(" ");
        int n=Integer.parseInt(nm[0]); //n个球员
        int m=Integer.parseInt(nm[1]); //m次射击
        String line=scanner.nextLine();
        scanner.close();
        String[] scores = line.split(" ");



        TreeMap<Player,Integer>map=new TreeMap<>((playera,playerb)->{
            //（1）进球总数更多的队员射门能力更强；
            int ac=0,bc=0;
            int acl=0,macl=0,mai=-1,bcl=0,mbcl=0,mbi=-1;
            List<Integer> al=new ArrayList<>();
            List<Integer> bl=new ArrayList<>();
            String a=playera.shot;
            String b= playerb.shot;
            for(int i=0;i<a.length();i++){
                char c=a.charAt(i);
                if(c=='1') {
                    ac++;
                    acl++;
                }else{
                    if(acl>macl){
                        macl=acl;
                        mai=i;
                    }
                    acl=0;
                }
            }
            for(int i=0;i<b.length();i++){
                char c=b.charAt(i);
                if(c=='1') {
                    bc++;
                    bcl++;
                }else{
                    if(bcl>mbcl){
                        mbcl=bcl;
                        mbi=i;
                    }
                    bcl=0;
                }
            }
            for(int i=mai;i<a.length();i++){
                char c=a.charAt(i);
                if(c=='0') {
                    al.add(i);
                }
            }
            for(int i=mbi;i<b.length();i++){
                char c=b.charAt(i);
                if(c=='0') {
                    bl.add(i);
                }
            }
            if(ac!=bc) {
                return -(ac - bc);
            }else{
                //（2）若进球总数一样多，则比较最多一次连续进的个数，更多的队员能力更强；
                if(macl!=mbcl){
                    return -(macl-mbcl);
                }else{
                    //（3）若最多一次连续进球个数一样多，则比较第一次射失的先后顺序，其中后射失的队员更强，若第一次射失顺序相同，则按继续比较第二次射失的顺序，后丢球的队员能力更强，依次类推；
                    int ai=0,bi=0;
                    while(ai<al.size()&&bi<bl.size()){
                        if(!al.get(ai).equals(bl.get(bi))){
                            return bl.get(bi)-al.get(ai);
                        }
                        ai++;
                        bi++;
                    }
                    //（4）若前3个规则排序后还能力相等，则队员编号更小的能力更强。
                    return playera.id-playerb.id;
                }
            }
        });

        int index=0;
        for (String score:scores){
            index++;
            map.put(new Player(score,index++),index);
        }

        HashMap<String,Integer> sr=new HashMap<>();

        int rank=1;
        for (Map.Entry<Player,Integer> entry:map.entrySet()){
            System.out.println(entry.getKey().shot+" "+rank);
            sr.put(entry.getKey().shot,rank);
            rank++;
        }

        for (int i=0;i<scores.length;i++){
            String score=scores[i];
            System.out.print(sr.get(score));
            if(i<n-1){
                System.out.print(" ");
            }
        }
    }
}
